package com.kylin.kwahoo;

import java.util.regex.Pattern;

/**
 *
 * @author Kylin Chan
 *
 */
public class DomainName {
	// all domain names 

	private static final String[] ext = { "top", "com.cn", "com", "net", "org", "edu",
			"gov", "int", "mil", "cn", "tel", "biz", "cc", "tv", "info", "name", "hk", 
			"mobi", "asia", "cd", "travel", "pro", "museum", "coop", "aero", "ad", "ae", 
			"af", "ag", "ai", "al", "am", "an", "ao", "aq", "ar", "as", "at", "au", "aw", 
			"az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bm", "bn", "bo", 
			"br", "bs", "bt", "bv", "bw", "by", "bz", "ca", "cc", "cf", "cg", "ch", "ci", 
			"ck", "cl", "cm", "cn", "co", "cq", "cr", "cu", "cv", "cx", "cy", "cz", "de", 
			"dj", "dk", "dm", "do", "dz", "ec", "ee", "eg", "eh", "es", "et", "ev", "fi", 
			"fj", "fk", "fm", "fo", "fr", "ga", "gb", "gd", "ge", "gf", "gh", "gi", "gl", 
			"gm", "gn", "gp", "gr", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr", "ht", 
			"hu", "id", "ie", "il", "in", "io", "iq", "ir", "is", "it", "jm", "jo", "jp", 
			"ke", "kg", "kh", "ki", "km", "kn", "kp", "kr", "kw", "ky", "kz", "la", "lb", 
			"lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", "ma", "mc", "md", "me", 
			"mg", "mh", "ml", "mm", "mn", "mo", "mp", "mq", "mr", "ms", "mt", "mv", "mw", "mx", 
			"my", "mz", "na", "nc", "ne", "nf", "ng", "ni", "nl", "no", "np", "nr", "nt", 
			"nu", "nz", "om", "qa", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", "pn", 
			"pr", "pt", "pw", "py", "re", "ro", "ru", "rw", "sa", "sb", "sc", "sd", "se", 
			"sg", "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sr", "st", "su", "sy", 
			"sz", "tc", "td", "tf", "tg", "th", "tj", "tk", "tm", "tn", "to", "tp", "tr", 
			"tt", "tv", "tw", "tz", "tech", "ua", "ug", "uk", "us", "uy", "va", "vc", "ve", "vg", 
			"vn", "vu", "wf", "ws", "ye", "yu", "za", "zm", "zr", "zw", "idv","xxx","xyz",
			"site", "win", "wang", "club", "link", "red", "science"};
	
	private static Pattern matchDomainName() {
		Pattern WEB_URL;
		StringBuilder sb = new StringBuilder(); 
		sb.append("("); 
		for (int i = 0; i < ext.length; i++) 
		{ 
			sb.append(ext[i]); 
			sb.append("|"); 
		} 
		sb.deleteCharAt(sb.length() - 1); 
		sb.append(")"); 
		String pattern = "((https?|s?ftp|irc[6s]?|git|afp|telnet|smb)://)?((\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|((www\\.|[a-zA-Z\\.\\-]+\\.)?[a-zA-Z0-9\\-]+\\." + sb.toString() + "(:[0-9]{1,5})?))((/[a-zA-Z0-9\\./,;\\?'\\+&%\\$#=~_\\-]*)|([^\\u4e00-\\u9fa5\\s0-9a-zA-Z\\./,;\\?'\\+&%\\$#=~_\\-]*))"; 
		WEB_URL = Pattern.compile(pattern);
		return WEB_URL;
	} 
	
	public static boolean isMatchDomainName(String webSite){
		
		Pattern webUrl=matchDomainName();
		if (webUrl.matcher(webSite).matches()) {
			return true;
		}
		return false;
	}
	
	public boolean isMatchIPAddr(String webSite)
	{
		Pattern webUrl;
		String PatternIP ="(?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
		webUrl = Pattern.compile(PatternIP);
		if (webUrl.matcher(webSite).matches()) {
			return true;
		}
		return false;
	}

}

